package com.ato.CommonClass.compare;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author wangjing
 * @create 2021--11--01--20:43
 * <p>
 * 定义： 定制排序
 * 1: implements Comparator<T>
 * 2：重写方法：compare(Object o1, Object o2)
 * 3 返回正整数， 表示 o1大于 o2
 * 返回负整数   o1 小于o2
 * 相等，返回 0
 */
public class CompartorTest {
    public static void main(String[] args) {
        String[] arr = new String[]{"cc", "zz", "bb", "dd", "mm", "ll", "aa"};
        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {

                if (o1 instanceof String && o2 instanceof String) {
                    String s1 = (String) o1;
                    String s2 = (String) o2;
                    return -s1.compareTo(s2); // 从小到大
//                     -s1.compareTo(s2); // 从大到小
                }
                throw new RuntimeException("数据格式错误");
            }
        });
        System.out.println(Arrays.toString(arr));

        // 定制比较： 自定义类如何比较
        Goods[] arr2 = new Goods[6];
        arr2[0] = new Goods("f华为", 24.3);
        arr2[1] = new Goods("f华为", 21.4);
        arr2[2] = new Goods("f苹果", 20.8);
        arr2[3] = new Goods("b小米", 10.1);
        arr2[4] = new Goods("c大米", 11.1);
        arr2[5] = new Goods("a中米", 155.1);
        Arrays.sort(arr2, new Comparator<Goods>() {
            @Override
            public int compare(Goods o1, Goods o2) {
//                return o1.getPrice().compareTo(o2.getPrice());
//                注意，这里的比较是这样的，因为是先比较，name ，那么先按照名称来排序，在遇到同名的时候，在按照价格来排序
//[Goods{name='中米', price=155.1}, Goods{name='华为', price=24.3}, Goods{name='华为', price=21.4}, Goods{name='大米', price=11.1}, Goods{name='小米', price=10.1}, Goods{name='苹果', price=20.8}]
                //                先比较name
                if (o1.getName().equals(o2)) {
//                  名称相等，按照价格排序
                    return Double.compare(o1.getPrice(), o2.getPrice());
                } else {
//                      名称不相等，则按照价格排序
                    return o1.getName().compareTo(o2.getName());
                }
            }
        });
        System.out.println(Arrays.toString(arr2));
    }
}
